#include "TestContenedorComprimido.h"
#include "../src/compresor/ContenedorComprimido.h"
#include "includes.h"
#include "../src/compresor/Aritmetico.h"
#include "../src/componentes/RegistroVariable.h"
#include "TipoClaveChar.h"

TestContenedorComprimido::TestContenedorComprimido() {

}

TestContenedorComprimido::~TestContenedorComprimido() {

}

void TestContenedorComprimido::run() {

	int tamanio = 50;
	Aritmetico aritmetico;

	ContenedorComprimido contenedor1(tamanio,&aritmetico);

	Bytes dato1("adato kjnj1");
	Bytes dato2("bdato2");
	Bytes dato3("odato3vxd");
	Bytes dato4("kdato");

	RegistroVariable* registro = new RegistroVariable(dato1);

	if (contenedor1.tieneLugar(registro)) {
		contenedor1.agregarRegistro(registro);
	}

	registro = new RegistroVariable(dato2);
	if (contenedor1.tieneLugar(registro)) {
		contenedor1.agregarRegistro(registro);
	}

	registro = new RegistroVariable(dato3);
	if (contenedor1.tieneLugar(registro)) {
		contenedor1.agregarRegistro(registro);
	}

	registro = new RegistroVariable(dato4);
	if (contenedor1.tieneLugar(registro)) {
		contenedor1.agregarRegistro(registro);
	}


	ContenedorComprimido contenedorComprimido2(tamanio, &aritmetico);


	contenedorComprimido2.hidratarse(contenedor1.serializarse());

	TipoClaveChar* extractor = new TipoClaveChar();
	Key claveB = extractor->crearClave(extractor->extraerClave(dato2));
	Key claveK = extractor->crearClave(extractor->extraerClave(dato4));

	assert(contenedorComprimido2.obtener(claveB.serializarse(), extractor).toString() == dato2.toString(), "Probando obtener de bloque");
	assert(contenedorComprimido2.obtener(claveK.serializarse(), extractor).toString() == dato4.toString(), "Probando obtener de bloque");

	delete extractor;
}
